热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

干货|携程AI推理性能的自动化优化实践

作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰

作者简介

 

携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本,实现AI技术在旅游场景的成功落地。

一、背景

近年来,人工智能逐渐在安防,教育,医疗和旅游等工业和生活场景中落地开花。在携程旅游业务上,AI技术同样广泛覆盖了多个旅游产品和旅游服务领域,携程度假AI研发根据旅游的特定场景和业务需求,将自然语言处理,机器翻译,计算机视觉,搜索排序等主流AI技术成功应用于旅游度假的多个业务线,例如自由行,跟团游,签证,玩乐和租车等。

从技术角度,为了适应不同的业务场景需求,涉及到多种AI技术,包括传统机器学习,卷积神经网络,Transformer等深度学习模型结构,以及知识图谱和图神经网络等技术领域。同时,为了充分挖掘AI技术的优势,模型设计复杂度日渐提升,包括模型深度,宽度以及结构复杂度等各个维度,计算量的增大使得AI推理性能瓶颈日益凸显,尤其是实时性的业务需求对推理速度要求更高。为了追求最佳推理性能,往往需要手动进行逐个优化,涉及的开发,部署和沟通成本都很高。主要问题集中在:

  • 模型结构种类多,性能瓶颈差异较大,适用的优化方法各有不同,手动优化成本高;

  • 优化方法众多,自上而下,涉及多种模型压缩方式,系统级,运行时优化等,手动优化门槛高;

  • 逐个手动优化,可推广性差,技术覆盖面有限;

  • 硬件平台的差异,需要针对性调优,导致优化的人力成本和部署成本都很高;

  • 新模型的发布和迭代,需要应用优化方法,涉及较高的沟通和接入成本,同时带来了性能的不稳定性;

  • 模型压缩技术对不同模型的优化效果有所差异,可能需要进行模型的再训练,训练和数据准备流程较长,效率低下;

因此,为了降低优化,部署和迭代成本,提高工作效率,并保证性能稳定,我们尝试搭建模型自动化优化平台,旨在为算法模型提供更全面易用,稳定性更好,使用和维护成本更低的优化解决方案。

二、优化平台的主要框架

从性能优化方法论的角度,无论是自动优化还是手动优化,主要关注以下两大方向:

  • 降低算法复杂度:可通过调整或简化模型结构,或者保持结构不变,改进算法实现效率;

  • 充分发挥软硬件性能:模型结构和算法不变,优化软件执行效率,使用硬件优势特征,最大化硬件执行效率;

围绕这两大优化方向以及人工智能的主流技术方向,优化平台的整体架构层自下而上可以划分为:

  • 硬件平台和操作系统层,包含x86架构的CPU,GPU,ARM,FPGA等多种平台,操作系统主要是Linux OS;

  • 引擎框架层,主要是Tensorflow,Pytorch等人工智能主流框架;

  • 推理优化层,主要是由我们结合业务场景和实际需求进行自主研发的优化技术,包含高性能算子库,图优化和修改工具以及量化蒸馏等模型压缩模块;

  • 算法模型:包含业界常用模型,例如以卷积为主要结构的CV模型,Resnet,GoogleNet,YOLO等;以Transformer为主要结构的NLP模型Bert,Albert等;

  • 应用场景:主要体现在旅游场景中的实际应用,例如智能客服平台,机器翻译,搜索排序等应用。

ca2b675f9c39a3069bb0cb3b5b2e55be.png

图1 模型平台的框架组成

三、自动化优化流程

优化平台的搭建能够系统有效地将优化技术整合起来,并快速应用于实际需求,但是如果不实现自动化优化,优化效率比较低,部署和迭代成本,沟通和接入成本高。因此我们建立了自动化优化流程,将所支持的优化技术涵盖在内,结合模型训练平台,数据标注平台,从模型设计,模型训练到模型推理优化,模型部署全链路,实现零介入无感知的优化效果,大大提升工作效率以及整体优化效果的稳定性。

图2所示为数据平台,模型训练平台,模型优化和部署的大概流程。具体有哪些优化手段,如何进行自动化实现的流程细节如图3所示。

0f471f969e895e83285c2a57e0836f39.png

图2 模型自动化优化实现框架

c7192abe57bb0c12226c0dcce9a4bea2.png

图3 自动优化实现的基本流程

四、功能模块

自动化优化平台的主要功能模块分四部分:

  • 高性能算子库,包括算子重写,算子合并等多个优化,支持attention,softmax,Layer norm等多个常用算子;

  • 计算图优化,主要进行计算图搜索,修改替换模型图结构,合并生成新的模型文件进行推理部署;同时包含常用的图优化和修改工具;

  • 模型压缩模块,包括模型静态和动态量化,模型剪枝和蒸馏等;

  • 模型部署优化,主要提供部署的优化方案,包括部署设计,运行时环境配置等。

74efcf13610ed6658c581bc27cb6f140.png

图4 模型优化平台基本模块

4.1  高性能算子库

该模块主要实现了常用的算子以及激活函数,包含基础算子,例如卷积,全连接层,batch norm,softmax等等以及合并后的经典的模型结构,例如transformer encoder,decoder等,基于tensorflow实现,采用c++实现,支持CPU和GPU平台的优化。

具体的优化方法涵盖了:

  • 算法改进,例如卷积算法的实现,将im2col和winograd卷积相结合,针对不同卷积核大小自适应使用最佳算法,实现最快的速度;

  • 内存重构,以BERT模型为例,最核心也是最耗时的计算模块之一就是多头自注意力机制multi-head self-attention,包含了大量的矩阵乘法计算,根据算法原理,包括query层,key层和value层的获取,query和key点乘等等,更重要的是当前的tensorflow算法实现包含了大量的行列变换操作(transpose),transpose带来大量的内存访问开销,这些问题可以通过内存重构来避免。

    同时很多矩阵乘法实现可以通过批量矩阵乘法调用提升计算效率,从而带来运行速度的提升。如下图5所示,self-attention机制原始实现流程包含了三次冗余的transpose操作,T(a)表示张量a的transpose形式。通过对内存重构可以避免这三次transpose操作。如图6所示,优化后的计算流程不包含transpose。

07b9373602b011667441a27238ae56b2.png

图5 Self-attention原始实现流程

094c32fd476446cc0e8553ec13e34b05.png

图6 self-attention优化后实现流程

二者对比,可以明显看出,优化后减少了4次transpose操作,也就是减少了内存访问的开销,同时对于矩阵乘法,调用批量矩阵乘法替代单个矩阵乘法操作,效率更高。

  • Intrinsic指令集优化,例如在CPU平台使用合适的向量化指令AVX512以及专门针对AI的VNNI指令等;

  • 算子融合,以transformer为例,每一层包含大量的零散算子,包括self-Attention,GELU激活函数,归一化Layer Normalization算子等多个零散算子,为了减少数据访问开销,将多个算子进行融合,实现新的GPU kernel。通过算子合并,算子数量减少约90%,模型涉及内存搬移的操作去除率100%,90%的时间集中在核心计算的kernel launcher。如图7所示。

8f8aa60e669d4c1ab35bdc1caf53fecb.png

图7 算子融合举例

4.2  模型压缩

模型压缩是提升推理性能的另一个有效手段,主要是指在算法层面上的模型优化,保证精度的前提下,通过合理的降低模型结构或者参数量,从而实现减少整个模型计算量的目的。

模型压缩的主要作用有:

  • 简化模型结构,降低计算复杂度,提升推理速度

  • 减少模型参数和模型尺寸,降低对内存的占用;

宏观上来讲,当前的优化平台支持的模型压缩方法有模型蒸馏,模型剪枝,低精度量化等。

4.2.1 模型蒸馏

模型蒸馏采用的是迁移学习,通过预先训练好的复杂模型(Teacher model)的输出作为监督信号去训练另外一个简单的学生网络(Student Model),从而实现对模型的简化,减少模型参数。模型蒸馏普遍性很强,可有效提升小模型准确率,但是调参相对困难,主要的核心的问题包括,如何选择特征层如何设计损失函数,学生模型的设计和数据集的选择等等。图8是我们压缩框架中实现的对Transformer的decoder模型的蒸馏实现。

3db374ad57b730f4555439b1ba91c079.png

图8  Transformer模型蒸馏

总损失函数构成:c60615538fa443023fc0d24e485e7322.png

其中α和β分别表示相应的损失值权重系数,α∈(0,1],β∈R,Lsoft是 Teacher网络的输出与Student网络模型输出的损失值,Lhard - 训练数据语料真实标签与Student网络模型输出的损失值,LAT_FMT - Teacher和Student网络模型的Decoder 的中间输出内容损失值,采用逐级分层蒸馏的方法,最终推理速度加速比达到2倍,精度损失BLEU值在可接受范围内(4%)。

4.2.2 低精度量化

低精度量化更多是从计算机硬件的设计角度,修改数据类型,降低数据精度,从而进行加速,依赖于硬件实现。量化的方式也包含多种,训练后量化(PTQ post training quantization),训练时量化(QAT,quantization aware traning)等。

目前我们优化平台支持float16和int8,其中int8量化只支持PTQ方式,一般情况下,为了保证模型精度,采用int8量化需要对量化后的模型校准,校准方式实现依赖于复杂的数学算法,目前较常用的是KL散度,对于CV模型,精度损失可接受。对于基于Transformer的NLP模型,精度损失较大,我们目前只支持GPU平台的float16实现。相比于float32,存储空间和带宽减半,精度几乎无损失,吞吐提升可达3倍。

4.2.3 模型剪枝

剪枝的主要思想是将权重矩阵中相对“不重要”的权值剔除,然后再对网络进行微调;方法简单,压缩效果可控,但是在剪枝粒度和方法选择需要认为定义规则,而且非结构化的剪枝效果需要依赖于硬件平台实现。模型剪枝在计算机视觉领域广泛使用,并取得了不错的效果。

图9举例实现了一种典型的结构化剪枝的方法[4]。我们针对CV模型,在原始模型中加入batch_normal层,对batch_normal的参考论文2:ChannelPruning for Accelerating Very Deep Neural Networks论文中提出利用channel进行剪枝,实验如下:在超分辨率的实验中,考虑在原始模型中加入batch_normal层,然后对batch_nomal的α值做正则化,最后利用该值作为依据进行剪枝,对训练好的模型中的batch_normal层的参数α进行分析,针对不同的卷积模型应用同样的方式,发现有些模型有近一半的参数在1e-5数量级,此外同一层中的分布方差极小,据此对模型进行通道级别的剪枝并进行fine tune训练,剪枝效果明显,模型大小减少到原来的1/4,精度不变的前提下,加速比可达4倍。而对于yolov3模型,大部分参数差异不大(MAP降低2%),可剪掉的有限,所以为了保持精度,参数量减半,加速比1.5x左右。

8b0430efcdc083492b28de503d68debd.png

图9 模型剪枝实例

4.3  接口设计

模型优化平台采用即插即用的模块化设计,可无缝对接模型训练平台,模型发布平台等。

  • 训练平台的调用和反馈:无缝对接训练平台,python接口调用或者web服务接口;如果需要重新训练,向训练平台申请接口;

  • 优化结果的接口提供:支持*.pb格式的模型输出;

具体使用方式如图10和图11所示。

e80d49b8abc531ae911ddd35dbb61b2b.png

  图10  高性能算子库的调用

图11给出了模型压缩模块的调用方式。

c6ce5d59b90ce6f6ad80236d265f5803.png

图11 模型压缩模块调用

五、优化成果

以实际应用机器翻译的Transformer模型为例,所测试平台为CPU: Intel(R) Xeon(R) Silver 4210CPU @ 2.20GHz; GPU:Nvidia T4,以固定算例的平均响应延迟为测试数据,优化后和优化前的加速比如下图12所示。

其中,原始性能基于tensorflow1.14为测试基准,在GPU平台框架层优化和编译运行时等多层优化实现,图13是Transformer翻译模型基于T4平台使用模型压缩和高性能算子库优化之后的对比结果,图中给出的是token长度为64,不同batch大小时的延迟和吞吐提升比例,实际中token越大,float16的优势越明显。

87e3e3b249f135551741cfdccf185cb3.png

图12

cd7c2dc6792711e3e9709af23387e7d4.png

图13

基于CPU硬件平台,针对CV和NLP模型(例如yolov3,bert和albert等),也取得了不错的优化效果,延迟加速比最高达到5倍以上。

六、未来展望

AI优化的潜力和需求很大,因为AI理论和模型的日益完善,应用场景对模型精度等推理服务质量的更高要求,必然使得模型结构和计算复杂度越来越高,对推理服务的性能需求只会有增无减。从成本和效率多个角度考虑,自动优化是必然趋势,并且业界也都陆续开展了相关研究,取得了一些进展。

依旧从两方面来看,同样是基于自动化优化这个大方向,算子优化等系统级优化最终都会通过tvm等AI编译器实现,而模型压缩则侧重于使用AutoML的思想,基于当前平台和实际需求,通过结构搜索找到符合要求的最简化的网络。当然,当前的蒸馏,剪枝等传统压缩方法也可以跟AutoML的思想相结合,同样能够高效地实现压缩效果。

因此,我们的自动化优化平台也正是基于自动化优化的思路,综合考虑业务场景需求,参考业界更先进的优化技术,为旅游场景的AI模型带来更加高效的优化方案,推动AI技术在旅游业务更好落地。

参考文献:

[1].Jiao X, Yin Y, Shang L, et al. Tinybert: Distilling bert for natural languageunderstanding[J]. arXiv preprint arXiv:1909.10351, 2019.

[2].Sun S, Cheng Y, Gan Z, et al. Patient knowledge distillation for bert modelcompression[J]. arXiv preprint arXiv:1908.09355, 2019.

[3].https://on-demand.gputechconf.com/gtc-cn/2019/pdf/CN9432/presentation.pdf

[4].Zhuang Liu, Jianguo Li, Zhiqiang Shen, GaoHuang, Shoumeng Yan, Changshui Zhang; Learning Efficient Convolutional Networksthrough Network Slimming ,Proceedings of the IEEE International Conference onComputer Vision (ICCV), 2017, pp. 2736-2744

[5] AshishVaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan NGomez, Lukasz Kaiser, and Illia Polosukhin. Attention is all you need. arXivpreprint arXiv:1706.03762, 2017.

[6]Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectionaltransformers for language understanding[J]. arXiv preprint arXiv:1810.04805,2018.

团队招聘信息

我们是携程度假AI研发团队,致力于为携程旅游事业部提供丰富的AI技术产品及优化工作,持续优化用户体验,提升效率。

在度假AI研发,你可以学习行业内前沿的AI算法知识,从算法到建模,到优化加速,到落地应用,经历完整的AI研发流程,同时为全球旅行者带来更好的旅游服务体验。

如果你热爱技术,并渴望不断进步,度假AI研发团队期待与你一同前行。目前我们有语音算法工程师,算法优化工程师等职位期待你的加入。简历投递邮箱:tech@trip.com,邮件标题:【姓名】-【度假AI研发】- 【职位】。

【推荐阅读】

  • 弱监督学习框架 Snorkel 在大规模文本数据集"自动标注"任务中的实践
  • NLP在携程机票人工客服会话分类中的应用
  • 10分钟给上万客服排好班,携程大规模客服排班算法实践

  • 携程酒店推荐模型优化

6e736834ee77b707f65040bfcdf27868.png

 “携程技术”公众号

  分享,交流,成长


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 2017亚马逊人工智能奖公布:他们的AI有什么不同?
    事实上,在我们周围,“人工智能”让一切都变得更“智能”极具讽刺意味。随着人类与机器智能之间的界限变得模糊,我们的世界正在变成一个机器 ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • TensorFlow入门上
    前置准备在阅读本文之前,请确定你已经了解了神经网络的基本结构以及前向传播、后向传播的基本原理,如果尚未了解,可以查看下文。神经网络初探​chrer.com也可以直接在我博客阅读Te ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • Two Sigma人均22万英镑~
    近期原创文章: ... [详细]
  • 软件测试工程师,需要达到什么水平才能顺利拿到 20k+ 无压力?
    前言最近看到很多应届生晒offer,稍有名气点的公司给出的价格都是一年30多W或者月薪20几k,相比之下工作几年的自己薪资确实很寒酸.根据我自己找工作经历,二线城市一般小公司招聘 ... [详细]
  • Word2vec,Fasttext,Glove,Elmo,Bert,Flairpre-trainWordEmbedding源码数据Github网址:词向量预训练实现Githubf ... [详细]
author-avatar
魔豆从容_368
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有